package com.pine.dcts.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.pine.dcts.common.DatasourceType;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;

import java.beans.Transient;
import java.util.Date;

import static com.pine.dcts.common.DatasourceType.*;

@Setter
@Getter
@TableName("dcts_database_info")
public class DatasourceInfo extends BaseEntity {
    @TableId(type = IdType.AUTO)
    private Integer id;

    /**
     * 类型
     */
    private DatasourceType type;
    /**
     * 名称
     */
    private String name;
    /**
     * 数据源编码
     */
    private String code;
    /**
     * 描述
     */
    private String description;
    /**
     * ip
     */
    private String host;
    /**
     * 密码
     */
    private String password;
    /**
     * 端口
     */
    private Integer port;
    /**
     * 用户名
     */
    private String username;
    /**
     * 某一个库
     */
    private String db;
    /**
     * 创建时间，默认为当前时间
     */
    private Date createTime;
    /**
     * 修改时间，默认为当前时间，数据变化时自动改为当前时间
     */
    private Date modifyTime;
    /**
     * 数据源版本
     */
    private String version;
    /**
     * 绑定的机构id
     */
    private Integer orgId;
    /**
     * 连接参数
     */
    private String connParams;

    //不进行序列化处理
    @Transient
    public String getPassword() {
        return password;
    }

    @Transient
    public String getJdbcUrl() {
        if (type == null) {
            // 数据源类型未知，无法决定url
            return "";
        }
        switch (type) {
            case CACHE:
                return String.format("jdbc:Cache://%s:%d/%s", host, port, db)
                        + (StringUtils.isBlank(connParams) ? "" : "?" + connParams);
            case SQLSERVER:
                return String.format("jdbc:sqlserver://%s:%d;DatabaseName=%s;", host, port, db)
                        + (StringUtils.isBlank(connParams) ? "" : connParams);
            case ORACLE:
                return String.format("jdbc:oracle:thin:@%s:%d:%s", host, port, db)
                        + (StringUtils.isBlank(connParams) ? "" : "?" + connParams);
            case MYSQL:
                return String.format("jdbc:mysql://%s:%d/%s", host, port, db)
                        + (StringUtils.isBlank(connParams) ? "" : "?" + connParams);
            default:
                return "";
        }
    }
}
